Multi-Window Support এবং Application State Synchronization Windows অ্যাপ্লিকেশন ডেভেলপমেন্টে গুরুত্বপূর্ণ বিষয়। বিশেষত, যখন আপনার অ্যাপ্লিকেশনটি একাধিক উইন্ডো সহ কাজ করে এবং প্রতিটি উইন্ডো বা ডায়ালগের মধ্যে অ্যাপ্লিকেশনের অবস্থা সঠিকভাবে সিঙ্ক্রোনাইজড থাকতে হয়।
এখানে আলোচনা করা হবে কিভাবে Multiple Windows তৈরি করা যায় এবং তাদের মধ্যে State Synchronization কিভাবে পরিচালনা করা যায়।
১. Multi-Window Support
Multiple Windows বলতে একাধিক উইন্ডো খোলার বা ব্যবহারকারীকে একাধিক ভিউ প্রদর্শন করার প্রক্রিয়া বোঝায়। এটি একটি সাধারণ প্রয়োজন যখন আপনার অ্যাপ্লিকেশনটি অনেক জটিল কাজ বা ডাটা প্রদর্শন করতে সক্ষম হতে হবে, এবং ব্যবহারকারীকে একাধিক তথ্য একযোগে দেখানোর সুযোগ দিতে হবে।
১.১. Windows Forms (Multiple Windows Example)
ধরা যাক, আমরা একটি মূল উইন্ডো থেকে একটি নতুন উইন্ডো খুলতে চাই। এটি করার জন্য, Form ক্লাসের একটি নতুন ইনস্ট্যান্স তৈরি করা হবে এবং নতুন উইন্ডো দেখানো হবে।
উদাহরণ:
MainForm.cs (প্রধান উইন্ডো)
using System;
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void openSecondWindowButton_Click(object sender, EventArgs e)
{
// New form instance
SecondForm secondForm = new SecondForm();
secondForm.Show(); // Show the second window
}
}
}
SecondForm.cs (দ্বিতীয় উইন্ডো)
using System;
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class SecondForm : Form
{
public SecondForm()
{
InitializeComponent();
}
}
}
ব্যাখ্যা:
- MainForm একটি বাটন ক্লিক করলে একটি নতুন SecondForm উইন্ডো খুলবে।
.Show()মেথড ব্যবহার করে নতুন উইন্ডো (form) ওপেন করা হয়।- আপনি চাইলে
.ShowDialog()ব্যবহার করে মডাল উইন্ডোও খুলতে পারেন, যার মাধ্যমে মূল উইন্ডোটি অপ্রাপ্য হয়ে যাবে যতক্ষণ না মডাল উইন্ডো বন্ধ না হয়।
২. Application State Synchronization
একাধিক উইন্ডোর মধ্যে state synchronization নিশ্চিত করতে হবে, যাতে ব্যবহারকারী একটি উইন্ডোতে যে পরিবর্তন করে তা অন্য উইন্ডোতে রিয়েল-টাইমে প্রদর্শিত হয়। এটি বিশেষত ডেটা শেয়ারিং এবং UI আপডেটের ক্ষেত্রে প্রয়োজন হয়।
২.১. State Synchronization in Multi-Windows
State synchronization করতে, Event Handling বা Data Binding ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, এক উইন্ডোর মধ্যে ডেটা পরিবর্তন হলে সেই পরিবর্তন অন্য উইন্ডোতে স্বয়ংক্রিয়ভাবে দেখা যাবে।
উদাহরণ:
ধরা যাক, আপনার দুটি উইন্ডো আছে - MainForm এবং SecondForm, এবং আপনি চান যে এক উইন্ডোতে TextBox-এ কিছু লিখলে তা অন্য উইন্ডোতে Label হিসেবে প্রদর্শিত হোক।
MainForm.cs (প্রধান উইন্ডো)
using System;
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void openSecondWindowButton_Click(object sender, EventArgs e)
{
// Pass the text from the textbox to the second window
string inputText = textBox1.Text;
SecondForm secondForm = new SecondForm(inputText);
secondForm.Show();
}
}
}
SecondForm.cs (দ্বিতীয় উইন্ডো)
using System;
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class SecondForm : Form
{
public SecondForm(string receivedText)
{
InitializeComponent();
// Set the text received from MainForm to the label
label1.Text = receivedText;
}
}
}
ব্যাখ্যা:
- MainForm থেকে SecondForm এ
TextBoxথেকে ডেটা পাঠানো হয়েছে (যেমনtextBox1.Text), এবং SecondForm এরLabel-এ সেই টেক্সটটি প্রদর্শিত হয়েছে। - আপনি যখন নতুন SecondForm উইন্ডোটি ওপেন করবেন, তখন MainForm-এ যে টেক্সট থাকবে, তা SecondForm-এ পাঠানো হবে এবং একটি Label-এ প্রদর্শিত হবে।
৩. State Synchronization with INotifyPropertyChanged
State Synchronization আরও উন্নত করার জন্য আপনি INotifyPropertyChanged ইন্টারফেস ব্যবহার করতে পারেন, যা ডেটা পরিবর্তন হলে UI-কে অবহিত করে।
৩.১. INotifyPropertyChanged Example
এই পদ্ধতিতে, যখন একটি ViewModel এর ডেটা পরিবর্তন হয়, তখন অন্যান্য উইন্ডো (বা UI) স্বয়ংক্রিয়ভাবে সেই পরিবর্তনটি দেখতে পায়।
Example:
MainForm.xaml.cs
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
DataContext = new MainViewModel();
}
private void openSecondWindowButton_Click(object sender, EventArgs e)
{
SecondForm secondForm = new SecondForm((MainViewModel)DataContext);
secondForm.Show();
}
}
public class MainViewModel : INotifyPropertyChanged
{
private string _textValue;
public string TextValue
{
get => _textValue;
set
{
_textValue = value;
OnPropertyChanged(nameof(TextValue));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
SecondForm.xaml.cs
using System.Windows.Forms;
namespace MultiWindowApp
{
public partial class SecondForm : Form
{
private MainViewModel _viewModel;
public SecondForm(MainViewModel viewModel)
{
InitializeComponent();
_viewModel = viewModel;
_viewModel.PropertyChanged += (sender, args) =>
{
if (args.PropertyName == "TextValue")
{
label1.Text = _viewModel.TextValue;
}
};
}
}
}
ব্যাখ্যা:
- MainViewModel একটি INotifyPropertyChanged ইন্টারফেস ইমপ্লিমেন্ট করে, যাতে ডেটা পরিবর্তিত হলে অন্যান্য UI উপাদানগুলি অবহিত হতে পারে।
- SecondForm তে
PropertyChangedইভেন্ট হ্যান্ডলার ব্যবহার করে, যখন TextValue পরিবর্তিত হয়, তখন তা SecondForm-এ Label-এ প্রদর্শিত হয়।
উপসংহার
Multi-Window Support এবং Application State Synchronization গুরুত্বপূর্ণ ফিচার, যা আপনাকে একাধিক উইন্ডো এবং তাদের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন পরিচালনা করতে সহায়তা করে। এই প্যাটার্নগুলি ব্যবহারকারীর জন্য আরও উন্নত, ইনটারঅ্যাকটিভ অ্যাপ্লিকেশন তৈরি করতে সহায়ক। INotifyPropertyChanged এর মতো প্রযুক্তি ব্যবহার করে আপনি সহজেই ডেটা এবং UI-এর মধ্যে সমন্বয় রাখতে পারেন, যাতে প্রতিটি উইন্ডোতে পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে প্রতিফলিত হয়।
Read more